var Path = require('path');
var Fs = require('fs');

function _interopDefaultLegacy(e) {
  return e && typeof e === 'object' && 'default' in e ? e : { default: e };
}

var Path__default = /*#__PURE__*/ _interopDefaultLegacy(Path);
var Fs__default = /*#__PURE__*/ _interopDefaultLegacy(Fs);

/**
 * pages.json 在项目中的相对路径
 */

/**
 * 获取 文件匹配正则（vue或nvue文件）
 * @param {string} publicPath
 * @param {string} path
 * @returns
 */
const getFileMatchReg = function(publicPath, path) {
  const fullPath = Path__default['default'].join(publicPath, `/${path}`);
  const regStr = JSON.stringify(`^${fullPath}.?vue$`);
  const reg = new RegExp(regStr.substring(1, regStr.length - 1));
  return reg;
};

/**
 * 获取 所有已注册的路由文件的正则规则（vue）
 * @returns
 */
const getRouteFileMatchRegAll = function(config) {
  try {
    const jsonStr = Fs__default['default'].readFileSync(Path__default['default'].join(process.env.UNI_INPUT_DIR, './pages.json'), 'utf8');
    // 移除注释
    // const { pages, subPackages = [] } = JSON.parse(jsonStr.replace(/\/\/[ \S\t]+/g, ''))

    const { pages, subPackages = [] } = JSON.parse(jsonStr);

    const list = [];

    pages.forEach(({ path }) => {
      list.push(getFileMatchReg(process.env.UNI_INPUT_DIR, path));
    });

    subPackages.forEach(({ pages, root }) => {
      pages.forEach(({ path }) => {
        list.push(getFileMatchReg(process.env.UNI_INPUT_DIR, root + '/' + path));
      });
    });

    return list;
  } catch (e) {
    console.log(e, '获取路由失败');
  }
};

/**
 * 有料网专用loader
 * @param {string} source
 * @returns
 */
function index(source) {
  const config = Object.assign({}, this.query);

  const routeFilePathRegList = getRouteFileMatchRegAll();

  // 匹配 路由文件
  if (routeFilePathRegList.some(reg => reg.test(this.resourcePath))) {
    source = source.replace(/<view(.*?)>/, s => s + config.ylGlobalComponents + config.todoTaskComponents);
  }

  return source;
}

exports.default = index;
